// 记忆函数
const _ = require("lodash");

function getArea(r) {
  console.log(r);
  return Math.PI * r * r;
}

// let getAreaWithMemoy = _.memoize(getArea);
// console.log(getAreaWithMemoy(4));
// console.log(getAreaWithMemoy(4));
// console.log(getAreaWithMemoy(4));
// console.log(getAreaWithMemoy(4));

// 模拟 memoize 方法
function memoize(f) {
  let cache = {};
  return function () {
    let key = JSON.stringify(arguments);
    cache[key] = cache[key] || f.apply(f, arguments);
    return cache[key];
  };
}

let getAreaWithMemoy = memoize(getArea);
console.log(getAreaWithMemoy(4));
console.log(getAreaWithMemoy(4));
console.log(getAreaWithMemoy(4));
console.log(getAreaWithMemoy(4));
